package com.itfreer.data.general;

import com.itfreer.data.general.domain.DomainType;
import com.itfreer.utils.StringUtils;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;

public class TableInfoClass implements ITableInfo {

	/**
	 * 获取字段信息
	 */
	protected HashMap<String, Field> fieldlist;

	public TableInfoClass(HashMap<String, Field> fields) {
		this.fieldlist = fields;
	}

	/**
	 * @Title: getTableName
	 * @Description: 获取表名称
	 * @param @return
	 * @return String 返回类型
	 * @throws
	 */
	@Override
	public String getTableName() {
		return this.getMetadataTableName();
	}

	/**
	 * @Title: getMetadataTableName
	 * @Description: 结构表名
	 * @param @return
	 * @return String 返回类型
	 * @throws
	 */
	@Override
	public String getMetadataTableName() {
		return null;
	}

	/**
	 * @Title: getMetadataTableAliasName
	 * @Description: 表结构别名
	 * @param @return
	 * @return String 返回类型
	 * @throws
	 */
	@Override
	public String getMetadataTableAliasName() {
		return null;
	}

	private TableType tableType = TableType.Table;

	public void setTableType(TableType table) {
		this.tableType = table;
	}

	/**
	 * 获取表类型
	 */
	@Override
	public TableType getTableType() {
		return tableType;
	}

	/**
	 * 获取字段信息
	 */
	@Override
	public Field[] getFields() {
		if (fieldlist == null) {
			return null;
		}
		return fieldlist.values().toArray(new Field[fieldlist.size()]);
	}

	/**
	 * 获取字段总数
	 */
	@Override
	public int getFieldCount() {
		return fieldlist.values().size();
	}

	/**
	 * 获取主键，非自动填充
	 */
	@Override
	public Field[] getKeyNoAutoFields() {
		Collection<Field> fields = fieldlist.values();
		if (fields == null)
			return null;

		List<Field> keys = new ArrayList<Field>();
		for (Field item : fields) {
			if (item.getIsKey() && !item.getIsAuto())
				keys.add(item);
		}
		return keys.toArray(new Field[keys.size()]);
	}

	/**
	 * 获取唯一值，非key和auto
	 */
	@Override
	public Field[] getUniqueFields() {
		Collection<Field> fields = fieldlist.values();
		if (fields == null)
			return null;

		List<Field> keys = new ArrayList<Field>();
		for (Field item : fields) {
			if (!StringUtils.IsNullOrSpace(item.getUniqueGroup()))
				keys.add(item);
		}
		return keys.toArray(new Field[keys.size()]);
	}

	/**
	 * 获取自动增值字段
	 */
	@Override
	public Field[] getAutoFields() {
		Collection<Field> fields = fieldlist.values();
		if (fields == null)
			return null;

		List<Field> keys = new ArrayList<Field>();
		for (Field item : fields) {
			if (item.getIsAuto())
				keys.add(item);
		}
		return keys.toArray(new Field[keys.size()]);
	}

	/**
	 * 获取查询字符串
	 */
	@Override
	public String getSelectFields(boolean onlyCanShow) {
		Collection<Field> fields = fieldlist.values();
		if (fields == null)
			return null;

		String selectFields = "";
		for (Field item : fields) {
			if (onlyCanShow) {
				if (item.getCanShow()) {
					selectFields += "[" + item.getFieldName() + "],";
				}
			} else {
				selectFields += "[" + item.getFieldName() + "],";
			}
		}
		if (!StringUtils.IsNullOrSpace(selectFields))
			selectFields = selectFields.substring(0, selectFields.length() - 1);
		return selectFields;
	}

	/**
	 * 根据字段名获取字段信息 fieldName 字段名
	 */
	@Override
	public Field getField(String fieldName) {
		if (fieldlist == null)
			return null;

		fieldName = fieldName.toUpperCase().trim();
		if (fieldlist.containsKey(fieldName))
			return fieldlist.get(fieldName);
		else
			return null;
	}

	/**
	 * 获取主键
	 */
	@Override
	public Field[] getKeyFields() {
		Collection<Field> fields = fieldlist.values();
		if (fields == null)
			return null;

		List<Field> keys = new ArrayList<Field>();
		for (Field item : fields) {
			if (item.getIsKey())
				keys.add(item);
		}
		return keys.toArray(new Field[keys.size()]);
	}

	/**
	 * 获取主键
	 */
	@Override
	public Field[] getKeyAndAutoFields() {
		Collection<Field> fields = fieldlist.values();
		if (fields == null)
			return null;

		List<Field> keys = new ArrayList<Field>();
		for (Field item : fields) {
			if (item.getIsKey() || item.getIsAuto())
				keys.add(item);
		}
		return keys.toArray(new Field[keys.size()]);
	}

	/**
	 * 获取或设置数据字典表代码字段名
	 */
	@Override
	public String getCodeFieldName() {
		return null;
	}

	/**
	 * 获取或设置数据字典表值字段名
	 */
	@Override
	public String getCaptionFieldName() {
		return null;
	}

	/**
	 * 获取或设置树形表ID字段名
	 */
	@Override
	public String getIDFieldName() {
		return null;
	}

	/**
	 * 获取或设置树形表PID字段名
	 */
	@Override
	public String getPIDFieldName() {
		return null;
	}

	/**
	 * 表关系
	 */
	@Override
	public RelationNode getRelation() {
		return null;
	}

	/**
	 * 获取简单分组
	 */
	@Override
	public String getTableGroup() {
		return null;
	}

	/**
	 * 获取排序字段名
	 */
	@Override
	public String getOrderFieldName() {
		return null;
	}

	/**
	 * 获取是否使用字段名
	 */
	@Override
	public String getIsUsedFieldName() {
		return null;
	}

	/**
	 * 获取是否可编辑字段名
	 */
	@Override
	public String getIsEditFieldName() {
		return null;
	}

	/**
	 * 获取是否可编辑字段名
	 */
	@Override
	public String getUnitFieldName() {
		return null;
	}

	/**
	 * 获取级别字段名
	 */
	@Override
	public String getLevelFieldName() {
		return null;
	}

	/**
	 * 获取字典阈名称
	 */
	@Override
	public String getDomainFieldName() {
		return null;
	}

	@Override
	public String getGUIDFieldName() {
		return null;
	}

	@Override
	public String getVersionFieldName() {
		return null;
	}

	@Override
	public HashMap<String, List<Field>> getUniqueFieldMap() {
		return null;
	}

	@Override
	public String getIsChildFieldName() {
		return null;
	}

	@Override
	public DomainType getDomainType() {
		return DomainType.No;
	}
}